package net.herrialde.geo.util;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;

import android.content.Context;
import android.widget.Toast;

public class RemoteUtil {
	
	private static String URL_GEO_API = "http://herrialde.net/api/geo";
	private static String PARAM_KOMUNITATEA = "cmu=";
	private static String PARAM_PROBINTZIA = "prv=";
	private static String PARAM_UDALERRIA = "mun=";
	private static String PARAM_PORTALA = "cal=";

	public static String getJson(String url) {
		String contenido = "";
		try {
			DefaultHttpClient httpClient = new DefaultHttpClient();
			HttpResponse httpResponse = httpClient.execute(new HttpPost(url));
	        HttpEntity httpEntity = httpResponse.getEntity();
	        contenido = EntityUtils.toString(httpEntity, "UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return contenido;
	}
	
	/**
	 * Devuelve las regiones (comunidades) de Euskal Herria
	 * @return	Cadena JSON
	 */
	public static String getJsonKomunitateak() {
		return getJson(URL_GEO_API);
	}
	
	/**
	 * Devuelve las provincias de la comunidad pasada
	 * @param numKomunitatea	1-Euskadi, 2-Nafarroa, 3-Iparralde
	 * @return	Cadena JSON
	 */
	public static String getJsonProbintziak(int numKomunitatea) {
		return getJson(URL_GEO_API + "?" + PARAM_KOMUNITATEA + numKomunitatea);
	}
	
	/**
	 * Devuelve los municipios de la provincia pasada
	 * @param numProbintzia		1-Araba, 20-Gipuzkoa, 31-Nafarroa, 48-Bizkaia
	 * 							97-Lapurdi, 98-Nafarroa Beherea, 99-Zuberoa
	 * @return	Cadena JSON
	 */
	public static String getJsonUdalerriak(int numProbintzia) {
		return getJson(URL_GEO_API + "?" + PARAM_PROBINTZIA + numProbintzia);
	}
	
	/**
	 * Devuelve las calles del municipio pasado
	 * @param numUdalerria	Nº de municipio (ej. Santurtzi 221)
	 * @return	Cadena JSON
	 */
	public static String getJsonKaleak(int numMunicipio) {
		return getJson(URL_GEO_API + "?" + PARAM_UDALERRIA + numMunicipio);
	}

	/**
	 * Devuelve los portales de la calle pasada, con su nº y coordenadas
	 * @param numKalea	Nº de calle
	 * @return	Cadena JSON
	 */
	public static String getJsonPortalak(int numCalle) {
		return getJson(URL_GEO_API + "?" + PARAM_PORTALA + numCalle);
	}
	
	public static JSONArray getJSONArrayComunidades(Context geoContext) {
		JSONArray result = null;
		try {
			String strJson = RemoteUtil.getJsonKomunitateak();
			if (strJson != null) {
				result = new JSONArray(strJson);
			}
		} catch (Exception e) {
			Toast.makeText(geoContext, "ERROR al recuperar información remota",
					Toast.LENGTH_SHORT).show();
		}
		return result;
	}
	
	public static JSONArray getJSONArrayProvincias(Context geoContext, int comunidadId) {
		JSONArray result = null;
		try {
			String strJson = RemoteUtil.getJsonProbintziak(comunidadId);
			if (strJson != null) {
				result = new JSONArray(strJson);
			}
		} catch (Exception e) {
			Toast.makeText(geoContext, "ERROR al recuperar información remota",
					Toast.LENGTH_SHORT).show();
		}
		return result;
	}
	
	public static JSONArray getJSONArrayMunicipios(Context geoContext, int provinciaId) {
		JSONArray result = null;
		try {
			String strJson = RemoteUtil.getJsonUdalerriak(provinciaId);
			if (strJson != null) {
				result = new JSONArray(strJson);
			}
		} catch (Exception e) {
			Toast.makeText(geoContext, "ERROR al recuperar información remota",
					Toast.LENGTH_SHORT).show();
		}
		return result;
	}
	
	public static JSONArray getJSONArrayCalles(Context geoContext, int municipioId) {
		JSONArray result = null;
		try {
			String strJson = RemoteUtil.getJsonKaleak(municipioId);
			if (strJson != null) {
				result = new JSONArray(strJson);
			}
		} catch (Exception e) {
			Toast.makeText(geoContext, "ERROR al recuperar información remota",
					Toast.LENGTH_SHORT).show();
		}
		return result;
	}
	
	public static JSONArray getJSONArrayPortales(Context geoContext, int calleId) {
		JSONArray result = null;
		try {
			String strJson = RemoteUtil.getJsonPortalak(calleId);
			if (strJson != null) {
				result = new JSONArray(strJson);
			}
		} catch (Exception e) {
			Toast.makeText(geoContext, "ERROR al recuperar información remota",
					Toast.LENGTH_SHORT).show();
		}
		return result;
	}

}
